package com.ruoyi.ade.llm.service;

import com.ruoyi.ade.llm.chunk.IAbstractChunkRequest;
import com.ruoyi.ade.llm.model.*;

import java.util.List;

/**
 * ADE知识库服务
 *    - ADE知识的索引
 *    - ADE知识的搜索
 */
public interface IAdeKnowledgeEmbedService {

    /**
     * 创建索引   如果已经存在则不创建
     * @param collection
     */
    void createCollection(String collection);

    /**
     * 删除索引
     * @param collection
     */
    boolean dropCollection(String collection);

    /**
     * 单条记录索引  不查重
     * @param ade
     */
    void index(String collection, String embedModel, AdeKnowledge ade);

    /**
     * 批量索引
     * @param ades
     */
    void index(String collecttion, String embedModel,  List<AdeKnowledge> ades);
    /**
     * 索引
     * @param ades
     * @param simScoreThreshold  相似性阈值   达到该相似性则认为重复了
     */
    void index(String collection, String embedModel, List<AdeKnowledge> ades, float simScoreThreshold);

    /**
     * 单条索引
     * @param ade
     * @param simScoreThreshold
     */
    void index(String collection, String embedModel,  AdeKnowledge ade, float simScoreThreshold);


    /**
     *
     * @param emr              需要检索的EMR
     * @param chunkRequest     EMR分割请求
     * @param score            相似性/相关性阈值
     * @param topN             需要返回的TOPN
     * @param rerank           是否需要rerank
     * @return
     */
    AdeRetrivedResponse search(String collection, String embedModel, String emr, String chunkType, float score, int topN, boolean rerank, boolean debug);

    /**
     * 检索知识
     * @param emr
     * @param retriveConfig   相似性检索配置
     * @param rerankConfig    相关性检索配置
     * @return
     */
    AdeRetrivedResponse search(String emr, AdeKnowledgeRetriveConfig retriveConfig, AdeKnowledgeRerankConfig rerankConfig);

}
